﻿using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net.Mail;
using System.Text;
using System.Xml;
using System.Xml.Serialization;

namespace ICE.Vacations.Datos.FileManager
{
    public class EntityToFile
    {
        public static void XmlSerializeToFile<T>(T objSerilizable, string filePath) where T : class, new()
        {
            //create an empty namespace
            var ns = new XmlSerializerNamespaces();
            ns.Add("", "");

            using (Stream stream = File.Open(filePath, FileMode.Create))
            {
                var serializer = new XmlSerializer(typeof(T));
                serializer.Serialize(stream, objSerilizable, ns);
                stream.Close();
            }
        }

        public static T Deserialize<T>(string xmlContent) where T : class, new()
        {
            var xDoc = new XmlDocument();
            xDoc.Load(xmlContent);
            var objInstanciado = new T();
            TextReader varTxtLectura = new StringReader(xDoc.OuterXml);
            var varDeserializador = new XmlSerializer(objInstanciado.GetType());
            objInstanciado = (T)varDeserializador.Deserialize(varTxtLectura);
            varTxtLectura.Close();
            return objInstanciado;
        }

        private static string getMessage(string codigo, string nombreEmpleado )
        {
            string htmlBody = "<html><head><style>" +
            "<!--" +
             "p.MsoNormal, li.MsoNormal, div.MsoNormal{mso-style-unhide:no;mso-style-qformat:yes;margin:0cm;margin-bottom:.0001pt;mso-pagination:widow-orphan;font-size:12.0pt;" +
                "font-family:'Times New Roman','serif';" +
                "mso-fareast-font-family:Calibri;" +
                "mso-fareast-theme-font:minor-latin;}" +
            "h3{font-size:13.5pt;font-family:'Times New Roman','serif';mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;font-weight:bold;}a:link, span.MsoHyperlink" +
                "{mso-style-priority:99;color:blue;text-decoration:underline;text-underline:single;}" +
            "p{mso-style-noshow:yes;mso-style-priority:99;font-size:12.0pt;font-family:'Times New Roman','serif';mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;}.MsoChpDefault" +
                "{mso-style-type:export-only;mso-default-props:yes;font-size:10.0pt;mso-ansi-font-size:10.0pt;mso-bidi-font-size:10.0pt;}" +
            "@page WordSection1{size:612.0pt 792.0pt;margin:70.85pt 3.0cm 70.85pt 3.0cm;mso-header-margin:36.0pt;mso-footer-margin:36.0pt;mso-paper-source:0;}div.WordSection1{page:WordSection1;}-->" +
            "</style><!--[if gte mso 10]>--><style>" +
             "table.MsoNormalTable{mso-style-name:'Tabla normal';mso-tstyle-rowband-size:0;mso-tstyle-colband-size:0;mso-style-noshow:yes;mso-style-priority:99;mso-style-parent:'';" +
                "mso-padding-alt:0cm 5.4pt 0cm 5.4pt;mso-para-margin:0cm;mso-para-margin-bottom:.0001pt;mso-pagination:widow-orphan;font-size:10.0pt;font-family:'Times New Roman','serif';}" +
            "</style>--></head><body lang=ES-CR link=blue style='tab-interval:35.4pt'><div class=WordSection1>" +
            "<table class=MsoNormalTable border=0 cellpadding=0 style='mso-cellspacing:1.5pt;mso-yfti-tbllook:1184'><tr style='mso-yfti-irow:0;mso-yfti-firstrow:yes'>" +
              "<td style='padding:.75pt .75pt .75pt .75pt'><h3><span style='mso-fareast-font-family:'Times New Roman''>Estimado(a)</span> <span id=NameControl>" + nombreEmpleado + "</span>, </span></h3></td>" +
              "<td style='padding:.75pt .75pt .75pt .75pt'><p class=MsoNormal><span style='mso-fareast-font-family:'Times New Roman''></span></p>" +
              "</td></tr><tr style='mso-yfti-irow:1;mso-yfti-lastrow:yes'><td colspan=2 style='padding:.75pt .75pt .75pt .75pt'>" +
              "<p><span id=MsgControl1>Haz solicitado el acceso en línea en nuestro sitio web para el envío de una Solicitud de Vacaciones. </br>" + " Hemos generado un código de registro único para usted, esto verificará que ha solicitado acceso.</br> Este código de registro de una sola vez es sensible al tiempo y válido para un solo uso." + "</span>&nbsp;</p><p><b>&nbsp;</b></p>" +
              "<p><span id=MsgControl2><b>Su Código de Envío es: </span>&nbsp; <span style='color:red'><span id=PasswordControl>" + codigo + "</span></span></b></p><p>&nbsp;</p><p><span id=MsgControl3>Por favor introduce este código en el formulario que ha accedido. </br>Gracias por utilizar nuestros servicios.</span>&nbsp;</p> <p><span id=MsgControl4><i><span style='font-size:10.0pt'>Haz hecho la solicitud desde la siguiente página:" +
              "<a href='"+Entidades.Config.linkPage+"'>"+Entidades.Config.linkPage+"</a></span></i></p></td></tr></table></div></body></html>";

            return htmlBody;
        }

        public static void SendSmtpMail(string code,string emailAccountTo, string nombreEmpleado)
        {
            try
            {
                MailMessage mail = new MailMessage();
                SmtpClient SmtpServer = new SmtpClient(Entidades.Config.smptServer,Entidades.Config.mailPort );

                mail.From = new MailAddress(Entidades.Config.accountFrom );
                mail.To.Add(emailAccountTo);
                mail.Subject = "Código de Verificación - Vacaciones ICE";

                mail.IsBodyHtml = true;

                mail.Body = getMessage(code,nombreEmpleado );
                SmtpServer.UseDefaultCredentials = false;
                SmtpServer.Credentials = new System.Net.NetworkCredential(Entidades.Config.smtpUser, Entidades.Config.smtpPassword, Entidades.Config.smtpDomain);
                SmtpServer.EnableSsl = true;
                SmtpServer.Send(mail);

            }
            catch (Exception exc)
            {
                Logger.fileWrite ("[SendSMTPMail ERROR]: " + exc.Message,Logger.MessageType.Error );
            }
        }
    }
}
